package com.wbxqy.car_management_system.service;

import com.wbxqy.car_management_system.dto.TimeSlot;
import com.wbxqy.car_management_system.entity.Car;
import com.wbxqy.car_management_system.entity.CarRequest;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wbxqy.car_management_system.entity.User;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 用车申请表 服务类
 * </p>
 *
 * @author wbxqy
 * @since 2024-07-04
 */
public interface ICarRequestService extends IService<CarRequest> {

    /**
     * 判断司机在一段时间内是否空闲
     * @param driverId
     * @param start
     * @param end
     * @return
     */
    boolean isDriverFree(int driverId, LocalDateTime start, LocalDateTime end);

    /**
     * 获取一个司机忙碌的时间段
     * @param driverId
     * @return
     */
    List<TimeSlot> getDriverBusyTimeSlots(int driverId);

    /**
     * 获取在这段时间中有空的司机
     *
     * @param start
     * @param end
     * @return
     */
    List<User> getFreeDrivers(LocalDateTime start, LocalDateTime end);

    /**
     * 判断一辆车在一段时间是否有空
     * @param carId
     * @param start
     * @param end
     * @return
     */
    boolean isCarFree(int carId, LocalDateTime start, LocalDateTime end);

    /**
     * 获取一辆车没有空的时间段
     * @param carId
     * @return
     */
    List<TimeSlot> getCarBusyTimeSlots(int carId);

    /**
     * 获取在这段时间中有空的车
     *
     * @param start
     * @param end
     * @return
     */
    List<Car> getFreeCars(LocalDateTime start, LocalDateTime end);

    /**
     * 获取完全的Request
     * @param requestId
     * @return
     */
    CarRequest getFullRequest(Integer requestId);

    /**
     * 获取一段时间内的用车申请
     * @param start
     * @param end
     * @return
     */
    List<CarRequest> getFullRequests(LocalDateTime start, LocalDateTime end);

    List<CarRequest> getFullRequestByStatus(String status);

}
